package com.ruoyi.web.controller.wx;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.web.controller.wx.vo.ResponseDto;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;

/**
 * 微信小程序用户接口
 *
 * @author gblfy
 * @date 2022-01-02
 */
@RestController
@RequestMapping("/wx/user")
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class WxMaUserController {
	private final Logger logger = LoggerFactory.getLogger(this.getClass());

	private final WxMaService wxMaService;

	/**
	 * 登陆接口
	 */
	@GetMapping("/login")
	public AjaxResult login(// @PathVariable String appid,
			String code) {

		try {
			WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
			this.logger.info("sessionKey：" + session.getSessionKey());
			this.logger.info("openid：" + session.getOpenid());
			// TODO 可以增加自己的逻辑，关联业务相关数据

			return AjaxResult.success(session);
		} catch (WxErrorException e) {
			this.logger.error(e.getMessage(), e);
			return AjaxResult.error(e.getMessage());
		}

	}
	// @GetMapping("/login")
	// public String login(@PathVariable String appid, String code) {
	// if (StringUtils.isBlank(code)) {
	// return "empty jscode";
	// }
	//
	// final WxMaService wxService = WxMaConfiguration.getMaService(appid);
	//
	// try {
	// WxMaJscode2SessionResult session =
	// wxService.getUserService().getSessionInfo(code);
	// this.logger.info(session.getSessionKey());
	// this.logger.info(session.getOpenid());
	// //TODO 可以增加自己的逻辑，关联业务相关数据
	// return JsonUtils.toJsonString(session);
	// } catch (WxErrorException e) {
	// this.logger.error(e.getMessage(), e);
	// return e.toString();
	// }
	// }

	/**
	 * <pre>
	 * 获取用户信息接口
	 * </pre>
	 */
	@GetMapping("/info")
	public String info(// @PathVariable String appid,
			String sessionKey, //
			String signature, //
			String rawData, //
			String encryptedData, //
			String iv) {

		// 用户信息校验
		if (!wxMaService.getUserService().checkUserInfo(sessionKey, rawData, signature)) {
			return "user check failed";
		}

		// 解密用户信息
		WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(sessionKey, encryptedData, iv);

		return JsonUtils.toJsonString(userInfo);
	}

	/**
	 * <pre>
	 * 获取用户绑定手机号信息
	 * </pre>
	 */
	@GetMapping("/phone")
	public String phone(// @PathVariable String appid,
			String sessionKey, //
			String signature, //
			String rawData, //
			String encryptedData, //
			String iv) {

		// 用户信息校验
		if (!wxMaService.getUserService().checkUserInfo(sessionKey, rawData, signature)) {
			return "user check failed";
		}

		// 解密
		WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv);

		return JsonUtils.toJsonString(phoneNoInfo);
	}

}
